// modbus_interface.h
#ifndef MODBUS_INTERFACE_H
#define MODBUS_INTERFACE_H
#include <atomic>
#include <thread>
#include <functional>
#include <cstring> 
#include <iostream>
#include <sstream>
#include <iomanip>

typedef std::function<void(const uint8_t* buffer,int length)> OnMsgCallback;

class ModbusInterface {
public:
    virtual ~ModbusInterface() = default;
    // 接口初始化函数，port对应设备描述符，比如/dev/ttyUSB0,baud_rate为波特率，默认波特率为115200
    virtual bool start(const std::string& port, int baud_rate = 115200) = 0;
    virtual void stop() = 0;
    // 寄存器查询接口，machine_addr 设备地址，start_addr 寄存器起始地址，end_addr 寄存器结束地址
    virtual void query_registers(uint8_t machine_addr, uint16_t start_addr, uint16_t end_addr) = 0;
    // 写单个寄存器，machine_addr设备地址，addr 寄存器地址，value写入的数值
    virtual void write_single_register(uint8_t machine_addr, uint16_t addr, uint16_t value) = 0;
    // 写多个寄存器，machine_addr 设备地址，start_addr 起始寄存器地址， values 每个寄存器对应的数据
    virtual void write_multiple_registers(uint8_t machine_addr, uint16_t start_addr, const std::vector<uint16_t>& values) = 0;
    // 查询接口监听函数
    virtual void query_onmsg(const OnMsgCallback &cb) = 0;
    // 单寄存器写入监听函数
    virtual void single_onmsg(const OnMsgCallback &cb) = 0;
    // 多寄存器写入监听函数
    virtual void multiple_onmsg(const OnMsgCallback &cb) = 0;
};

#endif